using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using System.Data.SqlClient;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;

public partial class Administrador_Empleads : System.Web.UI.Page
{
    
    protected void Page_Load(object sender, EventArgs e)
    {
        tb_codEmpleadoBuscar.Focus();
    }
    protected void buscarEmpleado(string tabla, string cadena, string ingresado)
    {
        SqlDataSource_Empleados.SelectParameters.Clear();
        SqlDataSource_Empleados.SelectCommand = "SELECT [cod_empleado],[nombres] as Nombre,[apellidos] as Apellidos,Personas.[nro_documento] as NroDocumento,[descripcion] as Documento,[nick] as Nick, Personas.[cod_tipo_documento] FROM [Empleados] join [Personas] on (Empleados.cod_tipo_documento = Personas.cod_tipo_documento and Empleados.nro_documento = Personas.nro_documento) join [Tipos_Documentos] on (Personas.cod_tipo_documento=Tipos_Documentos.cod_tipo_documento)  WHERE " + tabla + ".[" + cadena + "] like '" + ingresado + "%'";

        SqlDataSource_Empleados.SelectParameters.Add(cadena, TypeCode.String, "%");
        SqlDataSource_Empleados.SelectParameters[cadena].DefaultValue = ingresado + "%";

    }
    public void agregarTelefono()
    {
        String cadena = (String)ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        SqlConnection conexion = new SqlConnection(cadena);
        SqlCommand command = new SqlCommand("sp_agregar_telefono", conexion);
        try
        {
            conexion.Open();
            command.Connection = conexion;
            command.CommandType = System.Data.CommandType.StoredProcedure;
            command.Parameters.AddWithValue("cod_tipo_telefono", (ddl_tipoTelefonos.SelectedIndex + 1));
            command.Parameters.AddWithValue("cod_tipo_documento", (ddl_tipoDocumentoAgregar.SelectedIndex + 1));
            command.Parameters.AddWithValue("nro_documento", tb_nroDocumentoAgregar.Text);
            command.Parameters.AddWithValue("nro_telefono", tb_nroTelefono.Text);
        }
        catch (Exception error)
        {
            Response.Write("<SCRIPT language=\"javascript\"> window.alert(\"" + error.Message.ToString() + "\") </SCRIPT>");
        }
        finally
        {
            conexion.Close();
        }
    }
    /*Metodo para agregar el empleado*/
    public void agregarPersonaEmpleado(string nick, string email)
    {
        String cadena = (String)ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        SqlConnection conexion = new SqlConnection(cadena);
        int tipoDocumento = Convert.ToInt32((ddl_tipoDocumentoAgregar.SelectedIndex + 1).ToString());
        long nroDocumento = Convert.ToInt64(tb_nroDocumentoAgregar.Text);
        try
        {
            int existe = Persona.verificarSiExiste(tipoDocumento, nroDocumento);
            if (existe < 0)
            {
                /*Agregar Persona*/
                try
                {
                    long nroDoc=Convert.ToInt64(tb_nroDocumentoAgregar.Text);
                    Persona.agregar(nroDoc,tipoDocumento, tb_nombresAgregar.Text, tb_apellidosAgregar.Text, tb_direccionAgregar.Text, email);
                    int puesto=Convert.ToInt32(ddl_puesto.SelectedIndex+1);
                    string perfil = (ddl_perfiles.SelectedIndex + 1).ToString();
                    Empleado.agregarEmpleado(tipoDocumento, nroDocumento, puesto, perfil, nick);
                    /*Auditoria*/
                    Auditoria.guardarEvento(Session["usuario"].ToString(), ddl_tipoDocumentoAgregar.SelectedValue.ToString(), "-", "-", "Empleados", "Documento");
                    Auditoria.guardarEvento(Session["usuario"].ToString(), nroDocumento.ToString(), "-", "-", "Empleados", "Numero de documento");
                    Auditoria.guardarEvento(Session["usuario"].ToString(), ddl_puesto.SelectedValue.ToString(), "-", "-", "Empleados", "Puesto");
                    Auditoria.guardarEvento(Session["usuario"].ToString(), perfil.ToString(), "-", "-", "Empleados", "Perfil");
                    Auditoria.guardarEvento(Session["usuario"].ToString(), nick.ToString(), "-", "-", "Empleados", "nick");



                }
                catch (Exception error)
                {
                    Response.Write("<SCRIPT language=\"javascript\"> window.alert(\"" + error.Message.ToString() + "\") </SCRIPT>");
                }
            }
            else
            {
                try
                {
                    int puesto = Convert.ToInt32(ddl_puesto.SelectedIndex + 1);
                    string perfiles = (ddl_perfiles.SelectedIndex + 1).ToString();

                    Empleado.agregarEmpleado(tipoDocumento, nroDocumento, puesto, perfiles, nick);
                    Auditoria.guardarEvento(Session["usuario"].ToString(), ddl_tipoDocumentoAgregar.SelectedValue.ToString(), "-", "-", "Empleados", "Documento");
                    Auditoria.guardarEvento(Session["usuario"].ToString(), nroDocumento.ToString(), "-", "-", "Empleados", "Numero de documento");
                    Auditoria.guardarEvento(Session["usuario"].ToString(), ddl_puesto.SelectedValue.ToString(), "-", "-", "Empleados", "Puesto");
                    Auditoria.guardarEvento(Session["usuario"].ToString(), nick.ToString(), "-", "-", "Empleados", "nick");

                }
                catch (Exception error)
                {

                    //Response.Write("<SCRIPT language=\"javascript\"> window.alert(\"" + error.Message.ToString() + "\") </SCRIPT>");
                }
            }
            gv_empleados.DataBind();
            lb_estado.Text = "Activo";
            agregarTelefono();

        }
        catch (Exception error)
        {
            Response.Write("<SCRIPT language=\"javascript\"> window.alert(\"" + error.Message.ToString() + "\") </SCRIPT>");
        }
        finally
        {
            conexion.Close();

            lb_nroDocTelefono.Text = tb_nroDocumentoAgregar.Text;
            lb_codTipoDoc.Text = (ddl_tipoDocumentoAgregar.SelectedIndex + 1).ToString();
        }
    }


    protected void ib_cancelarBuscar_Click(object sender, ImageClickEventArgs e)
    {
        lb_error.Visible = false;
        tb_codEmpleadoBuscar.Enabled = true;
        tb_codEmpleadoBuscar.Text = string.Empty;
        tb_nroDocumentoBuscar.Enabled = true;
        tb_nroDocumentoBuscar.Text = string.Empty;
        tb_nombreEmplBuscar.Text = string.Empty;
        tb_apellidoBuscar.Text = string.Empty;
        ib_editarEmpleado.Visible = false;
        ib_repote.Visible = true;
        ib_agregarEmpleado.Visible = true;
        ib_buscar.Visible = true;
        gv_empleados.DataBind();
    }
    protected void ib_buscar_Click(object sender, ImageClickEventArgs e)
    {
        lb_error.Visible = false;
        tb_codEmpleadoBuscar.Focus();
        int num = 0;
        SqlDataSource_Empleados.SelectParameters.Clear();
        if (tb_apellidoBuscar.Text != string.Empty)
        {
            if (num == 0)
            {
                SqlDataSource_Empleados.SelectCommand = "SELECT [cod_empleado],[nombres] as Nombre,[apellidos] as Apellidos,Personas.[nro_documento] as NroDocumento,[descripcion] as Documento,[nick] as Nick, Personas.[cod_tipo_documento] FROM [Empleados] join [Personas] on (Empleados.cod_tipo_documento = Personas.cod_tipo_documento and Empleados.nro_documento = Personas.nro_documento) join [Tipos_Documentos] on (Personas.cod_tipo_documento=Tipos_Documentos.cod_tipo_documento) "+
                   " WHERE Personas.apellidos like '" +tb_apellidoBuscar.Text+ "%'";
                
                num++;
            }
            else
            {
                SqlDataSource_Empleados.SelectCommand += " AND Personas.apellidos like '" + tb_apellidoBuscar.Text + "%'";
                num++;
            }
        }
        if (tb_nombreEmplBuscar.Text != string.Empty)
        {
            if (num == 0)
            {
                SqlDataSource_Empleados.SelectCommand = "SELECT [cod_empleado],[nombres] as Nombre,[apellidos] as Apellidos,Personas.[nro_documento] as NroDocumento,[descripcion] as Documento,[nick] as Nick, Personas.[cod_tipo_documento] FROM [Empleados] join [Personas] on (Empleados.cod_tipo_documento = Personas.cod_tipo_documento and Empleados.nro_documento = Personas.nro_documento) join [Tipos_Documentos] on (Personas.cod_tipo_documento=Tipos_Documentos.cod_tipo_documento) " +
                   " WHERE Personas.nomberes like '" + tb_nombreEmplBuscar.Text + "%'";
                num++;
            }
            else
            {
                SqlDataSource_Empleados.SelectCommand += " and Personas.nombres like '" + tb_nombreEmplBuscar.Text + "%'";
                num++;
            }
        }
        if (tb_codEmpleadoBuscar.Text != String.Empty)
        {
            if (num == 0)
            {
                SqlDataSource_Empleados.SelectCommand = "SELECT [cod_empleado],[nombres] as Nombre,[apellidos] as Apellidos,Personas.[nro_documento] as NroDocumento,[descripcion] as Documento,[nick] as Nick, Personas.[cod_tipo_documento] FROM [Empleados] join [Personas] on (Empleados.cod_tipo_documento = Personas.cod_tipo_documento and Empleados.nro_documento = Personas.nro_documento) join [Tipos_Documentos] on (Personas.cod_tipo_documento=Tipos_Documentos.cod_tipo_documento) " +
                  " WHERE Empleados.cod_empleado like '" + tb_codEmpleadoBuscar.Text + "%'";
                
                num++;
            }
            else
            {
                SqlDataSource_Empleados.SelectCommand += " and Empleados.cod_empleado like '" + tb_codEmpleadoBuscar.Text + "%'";
                num++;
            }
        }
        if(tb_nroDocumentoBuscar.Text!=string.Empty)
        {
            if(num==0)
            {
                SqlDataSource_Empleados.SelectCommand = "SELECT [cod_empleado],[nombres] as Nombre,[apellidos] as Apellidos,Personas.[nro_documento] as NroDocumento,[descripcion] as Documento,[nick] as Nick, Personas.[cod_tipo_documento] FROM [Empleados] join [Personas] on (Empleados.cod_tipo_documento = Personas.cod_tipo_documento and Empleados.nro_documento = Personas.nro_documento) join [Tipos_Documentos] on (Personas.cod_tipo_documento=Tipos_Documentos.cod_tipo_documento) " +
                  " WHERE Empleados.nro_documento like '" + tb_nroDocumentoBuscar.Text + "%'";
              
                num++;
            }
            else
            {
                SqlDataSource_Empleados.SelectCommand += " and Empleados.nro_documento like '" + tb_nroDocumentoBuscar.Text + "%'";
                num++;
            }
        } if (tb_apellidoBuscar.Text.Equals("") && tb_codEmpleadoBuscar.Text.Equals("") && tb_nombreEmplBuscar.Text.Equals("") && tb_nroDocumentoBuscar.Text.Equals(""))
        {
            SqlDataSource_Empleados.SelectCommand = "SELECT [cod_empleado],[nombres] as Nombre,[apellidos] as Apellidos,Personas.[nro_documento] as NroDocumento,[descripcion] as Documento,[nick] as Nick, Personas.[cod_tipo_documento] FROM [Empleados] join [Personas] on (Empleados.cod_tipo_documento = Personas.cod_tipo_documento and Empleados.nro_documento = Personas.nro_documento) join [Tipos_Documentos] on (Personas.cod_tipo_documento=Tipos_Documentos.cod_tipo_documento) ";
        }
        gv_empleados.DataBind();
    }
    /*Al crear la cuenta se guarda el empleado*/
    protected void Createuserwizard1_CreatedUser(object sender, EventArgs e)
    {
        Page.Validate("campoVacio");
        if (Page.IsValid)
        {

            string nick = Createuserwizard1.UserName.ToString();
            string email = Createuserwizard1.Email.ToString();
            Roles.AddUserToRole(Createuserwizard1.UserName.ToString(), ddl_perfiles.SelectedValue.ToString());

            lb_nick.Text = Createuserwizard1.UserName.ToString();
            lb_email.Text = Createuserwizard1.Email.ToString();
            agregarPersonaEmpleado(nick, email);
            limpiar();
            Response.Redirect("Empleads.aspx");
            lb_estado.Text = "Activo";
            ib_confirmarRegistro.Visible = true;
            ib_cancelarAgregar.Visible = true;

        }
    }


    protected void ib_agregarEmpleado_Click(object sender, ImageClickEventArgs e)
    {
        lb_error.Visible = false;
        limpiar();
        tb_nroDocumentoAgregar.Focus();
        div_buscarEmpleado.Visible = false;
        div_agregarEmplado.Visible = true;
    }
    protected void limpiar()
    {
        tb_apellidosAgregar.Text = string.Empty;
        tb_direccionAgregar.Text = string.Empty;
        tb_nombresAgregar.Text = string.Empty;
        tb_nroDocumentoAgregar.Text = string.Empty;
        tb_nroTelefono.Text = string.Empty;
        //ddl_perfiles.SelectedIndex = 0;
        //ddl_puesto.SelectedIndex = 0;
        //ddl_tipoDocumentoAgregar.SelectedIndex = 0;
        //ddl_tipoTelefonos.SelectedIndex = 0;
        lb_estado.Text = string.Empty;
    }
    protected void B_CancelarAgr_Click(object sender, ImageClickEventArgs e)
    {
        tb_nroDocumentoAgregar.Focus();
        limpiar();
        Response.Redirect("~/Administrador/Empleads.aspx");
    }
    
    protected void ib_confirmarRegistro_Click(object sender, ImageClickEventArgs e)
    {
        Page.Validate("campoVacio");
        if (Page.IsValid)
        {
            agregarPersonaEmpleado(lb_nick.Text, lb_email.Text);
            agregarTelefono();
            limpiar();
            Response.Redirect("Empleados.aspx");
            div_buscarEmpleado.Visible = false;
            div_agregarEmplado.Visible = true;
            Createuserwizard1.Visible = true;
        }

    }
    //gvEmpleados_RowCommand
    protected void gvEmpleados_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        gv_empleados.SelectedIndex = Convert.ToInt32(e.CommandArgument);
        if (Convert.ToInt32(e.CommandArgument) == 1) { return; }

        GridViewRow row = gv_empleados.SelectedRow;
        string codEmpleado = row.Cells[0].Text;
        string nombres = row.Cells[1].Text;
        string apellidos = row.Cells[2].Text;
        string nro_documento = row.Cells[3].Text;
        string codTipoDoc = row.Cells[6].Text;

        lb_codTipoDocEdit.Text = codTipoDoc;
        if (e.CommandName == "editar")
        {
            lb_error.Visible = false;
            tb_nombreEmplBuscar.Text = nombres;
            tb_apellidoBuscar.Text = apellidos;
            tb_nroDocumentoBuscar.Text = nro_documento;
            tb_codEmpleadoBuscar.Text = codEmpleado;
            tb_codEmpleadoBuscar.Enabled = false;
            ib_buscar.Visible = false;
            ib_agregarEmpleado.Visible = false;
            ib_repote.Visible = false;
            ib_editarEmpleado.Visible = true;
            tb_nroDocumentoBuscar.Enabled = false;
        }
        if (e.CommandName == "Delete")
        {
            int codigo = Convert.ToInt32(codEmpleado);
            try
            {
                Empleado.eliminarEmpleado(codigo);
            }catch(Exception error){
                lb_error.Text = "No se puede eliminar porque esta siendo usado";
                lb_error.Visible = true;
            }
        }
    }
    /*Evento que modifica los datos del empleado*/
    protected void ib_editarEmpleado_Click(object sender, ImageClickEventArgs e)
    {
        Page.Validate("CampoVacio");
        if (Page.IsValid)
        {
            ib_buscar.Visible = true;
            ib_agregarEmpleado.Visible = true;
            ib_repote.Visible = true;
            ib_editarEmpleado.Visible = false;
            int codTipoDoc = Convert.ToInt32(lb_codTipoDocEdit.Text);
            long nroDoc = Convert.ToInt64(tb_nroDocumentoBuscar.Text);
            Persona.modificar(nroDoc, codTipoDoc, tb_nombreEmplBuscar.Text, tb_apellidoBuscar.Text, "", "");
            tb_nombreEmplBuscar.Text = string.Empty;
            tb_apellidoBuscar.Text = string.Empty;
            tb_nroDocumentoBuscar.Text = string.Empty;
            tb_codEmpleadoBuscar.Text = string.Empty;
            tb_codEmpleadoBuscar.Enabled = true;
            tb_nroDocumentoBuscar.Text = string.Empty;
            tb_nroDocumentoBuscar.Enabled = true;
            SqlDataSource_Empleados.SelectParameters.Clear();
            SqlDataSource_Empleados.SelectCommand = "SELECT [cod_empleado],[nombres] as Nombre,[apellidos] as Apellidos,Personas.[nro_documento] as NroDocumento,[descripcion] as Documento,[nick] as Nick, Personas.[cod_tipo_documento] FROM [Empleados] join [Personas] on (Empleados.cod_tipo_documento = Personas.cod_tipo_documento and Empleados.nro_documento = Personas.nro_documento) join [Tipos_Documentos] on (Personas.cod_tipo_documento=Tipos_Documentos.cod_tipo_documento)";
            gv_empleados.DataBind();
            Auditoria.guardarEvento(Session["usuario"].ToString(), tb_nroDocumentoBuscar.Text, "-", "-", "Empleados", "Documento");
            Auditoria.guardarEvento(Session["usuario"].ToString(), tb_nombreEmplBuscar.Text, "-", "-", "Empleados", "Nombre");
            Auditoria.guardarEvento(Session["usuario"].ToString(), tb_apellidoBuscar.Text, "-", "-", "Empleados", "Apellido");
        }
    }
    /*Evento del boton reporte: Redirecciona a la pagina de reporte de empleado*/
    protected void ib_reporte_Click(object sender, ImageClickEventArgs e)
    {
        Response.Redirect("~/ReporteEmpleado.aspx");
    }

    protected void tb_nombreEmplBuscar_TextChanged(object sender, EventArgs e)
    {

    }
}
